package queens.exceptions;

import queens.util.Constantes;


@SuppressWarnings("serial")
public class QueensException extends RuntimeException {

	private String clase;
	private String metodo;
	private String mensaje;
	private String mensajePersonalizado;
	private Exception e;
	
	/**
	 * Constructor
	 * @param clase
	 * @param metodo
	 * @param mensaje
	 * @param e
	 */
	public QueensException(String clase, String metodo, String mensaje, Exception e){
		this.clase = clase;
		this.metodo = metodo;
		this.mensaje = mensaje;
		this.mensajePersonalizado = mensaje;
		generarMensaje();
		this.e = e;
	}

	/**
	 * Da valor al atributo mensaje a partir de la informacion recibida
	 */
	private void generarMensaje() {
		StringBuffer aux = new StringBuffer();
		
		if (clase != null) {
			aux.append("CLASE: ").append(clase).append(" ");
		}
		if (metodo != null) {
			aux.append("METODO: ").append(metodo);
		}
		if (e != null) {
			aux.append(Constantes.CRLF).append(Constantes.TAB).append("ERROR: ").append(e.getClass()).append("-").append(e.getMessage());
		}		
		if (mensaje != null) {
			aux.append(Constantes.CRLF).append(Constantes.TAB).append("MENSAJE: ").append(mensaje);
		}
		mensaje = aux.toString();
	}

	public String getClase() {
		return clase;
	}

	public void setClase(String clase) {
		this.clase = clase;
	}

	public String getMetodo() {
		return metodo;
	}

	public void setMetodo(String metodo) {
		this.metodo = metodo;
	}

	public String getMensaje() {
		return mensaje;
	}

	public void setMensaje(String mensaje) {
		this.mensaje = mensaje;
	}

	public String getMensajePersonalizado() {
		return mensajePersonalizado;
	}

	public void setMensajePersonalizado(String mensajePersonalizado) {
		this.mensajePersonalizado = mensajePersonalizado;
	}

	public Exception getE() {
		return e;
	}

	public void setE(Exception e) {
		this.e = e;
	}
}